package com.oig.common.exception;


/**
 * http status code
 * 4xx定义：4xx为客户端错误，我们只需发现客户端参数 错误统一返回400
 * 400
 * 请求出现错误，比如请求头不对等，所有不想明确区分的客户端请求出错都可以返回 400。
 * 401
 * 没有提供认证信息。比如说，请求的时候没有带上 Token 等。
 * 402
 * 为将来的需要所保留的状态码。
 * 403
 * 请求的资源不允许访问。比如说，你使用普通用户的 Token 去请求管理员才能访问的资源。
 * 404
 * 请求的内容不存在。
 * 405
 * 请求的方法不允许使用。比如说，服务器只实现了 PATCH 了局部更新资源，并没有实现 PUT 来替换资源，而我们使用了 PUT，这时候服务器可以返回 405 来告知并没有实现对 PUT 的相关处理。
 * 406
 * 请求的资源并不符合要求。比如说，我们 header 里请求 JSON 格式的数据，但是服务器只有 XML 格式的数据，这时候可以返回 406 告知。
 * 407
 * 类似 401，但是要求必须去同代理服务器进行认证。
 * 408
 * 客户端请求超时。我们想 POST 创建一个用户，虽然建立了连接，但是网络不好，服务器在规定时间内没有得到我们的请求信息，这时候服务器可以返回 408 告诉我们超时了。然后我们可以重新发送请求。
 * 409
 * 请求冲突。比如说，服务器要求不同用户不能重名，服务器已经有了一个名叫小伟的用户，这时候我们又想创建一个名叫小伟的用户，服务器可以返回 409，告诉我们冲突了，也可以在 body 中明确告知是什么冲突了。
 * 410
 * 请求资源曾经存在，但现在不存在了。比如说，我们下载葫芦娃，但是因为版权被删了，下载不了了，这时候服务器返回 410，告诉我们洗洗早点睡。
 * 411
 * 没有提供请求资源的长度。比如说，我们下载葫芦娃，服务器只允许我们分部分下载，我们如果不告诉服务器我们要下载哪部分，服务器就返回 411 警告我们。
 * 412
 * 请求的资源不符合请求头中的 IF-* 的某些条件。比如说，我们下载葫芦娃，然后在请求头告知服务器要 5.20 后更新过的，服务器没有，于是返回了 412。
 * 413
 * 请求体过大。比如说，服务器要求上传文件不能超过 5M，但是我们 POST 了 10M，这时候就返回 413。
 * 414
 * 请求的 URI 太长了。比如说，我们提供了太多的 Query 参数，以至于超过了服务器的限制，这时候可以返回 414。
 * 415
 * 不支持的媒体类型。比如说，我们上传了一张七娃的 GIF 动图，而服务器只允许你上传 PNG 图片，这时候就返回 415。
 * 416
 * 请求的区间无效。比如说，我们分部分下载时请求葫芦娃的 10 分钟到 12 分钟的内容，但是这部葫芦娃只有 1 分钟的内容，这时候就返回 416。
 * 417
 * 预期错误。指服务器没法满足我们在请求头里的 Expect 相关的信息。
 *
 * 5xx定义：5xx 为服务器错误
 * 500
 * 服务器错误。没法明确定义的服务器错误都可以返回这个。
 * 501
 * 请求还没有被实现。比如说，我们请求一个接口来自动拒绝项目经理的要求，但是这个接口只是美好的想象，并没有被实现，这时候可以返回 501。
 * 502
 * 网关错误。比如说，我们向服务器 A 请求下载葫芦娃，但是 A 其实只是一个代理服务器，他得向 B 请求葫芦娃，但是不知道为啥 B 不理他或者给他错误，这时候哦可以 A 返回 502 用来表示 B 这家伙傲娇了。
 * 503
 * 服务暂时不可用。比如说，服务器正好在更新代码重启。
 * 504
 * 类似 502，但是这时候是 B 不理 A，超时了 。
 * 505
 * 请求的 HTTP 版本不支持。比如说，现在强行根据 HTTP 1000 来请求。
 */
public enum ErrorCodeEnum {


    /**
     *  请求参数错误
     */
    ERROR_INPUT(400000, "请求参数错误"),

    /**
     * 系统错误
     */
    SYSTEM_ERROR(500000,"系统错误"),
    ;

    private final int code;
    private final String errmsg;

    public int getCode(){
        return code;
    }

    public String getErrmsg(){
        return errmsg;
    }

    ErrorCodeEnum(int code, String errmsg){
        this.code = code;
        this.errmsg = errmsg;
    }

}
